Table of Contents [Hide/Show]
Jetfire Code: Contact See Also
// C O N T A C T I N T E R F A C E //=================================================================================== // Contact.txt //=================================================================================== // Copyright (C) 2007 TrackerRealm Corporation // This file is part of Jetfire. http://Jetfire.ca // // Jetfire is open software: you can redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation, version 3 of the License. // // Jetfire is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; // without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along with Jetfire. // If not, see http://www.gnu.org/licenses. // REMOVAL OF THIS NOTICE IS VIOLATION OF THE COPYRIGHT. //=================================================================================== // // Contact: a common contact. This is inherited by Person, OrganizationUnit and Resource. This class should not be instantiated. // Profile: allows a contact to be used for many purposes, e.g. worker, dad, coach, etc // OrganizationUnit: used to create organization hierarchies // Resource: a general class used for meeting rooms, bull-dozers namespace JetfireContacts { // DisplayName = "Contact"; // ToolTip = "Interface for a contact."; public workflow Contact { // C O N S T R U C T O R - Instantiate the Contact // Contact starts in the Start State. public Contact() { this.Subject = " New Contact"; this.InitializeContact(); } public Contact(string subject) { this.Subject = subject; this.InitializeContact(); } private void InitializeContact() { profiles.Subject = "Profiles List"; addresses.Subject = "Address List"; emails.Subject = "Email List"; phones.Subject = "Phone List"; tags.Subject = "Tag List"; notes.Subject = "Note List"; enterstate this.Start(); } private virtual void ResetContact() { foreach (BaseProfile profile in Profiles) { profile.ResetProfile(); } } // Static Properties private static Contact none; public static Contact None { get { return none; } set { none = value; } } // P R O P E R T I E S OrganizationUnit ou; ShowContactAs showContactAs = ShowContactAs.None; TimeZone timeZone = TimeZone.EST; RecordStanding rs = RecordStanding.Active; List profiles = new List(); List addresses = new List(); List emails = new List(); List phones = new List(); List tags = new List(); List notes = new List(); string homeAddress1; string homeAddress2; string homeCity; string homePC; Province homeProvince; string homeEmail; string otherEmail; string homePhone; string businessPhone; string mobilePhone; string faxPhone; // scratch pad variables Address a; EmailAddress e; Phone p; LocationType atType; string temp; public OrganizationUnit OrgUnit { get { return ou; } set { ou = value; } } public ShowContactAs ShowContactAs { get { return showContactAs; } set { showContactAs = value; } } public TimeZone TimeZone { get { return timeZone; } set { timeZone = value; } } public RecordStanding RecordStanding { get { return rs; } set { rs = value; } } public List Profiles { get { return profiles; } } public List Addresses { get { return addresses; } } public List EmailAddresses { get { return emails; } } public List PhoneNumbers { get { return phones; } } public List Tags { get { return tags; } } public List Notes { get { return notes; } } public string HomeAddress1 { get { return homeAddress1; } set { homeAddress1 = value; atType = LocationType.Home; a = this.GetAddress(atType, value); if (a != Address.None) { a.Address1 = value; } } } public string HomeAddress2 { get { return homeAddress2; } set { homeAddress2 = value; atType = LocationType.Home; a = this.GetAddress(atType, value); if (a != Address.None) { a.Address2 = value; } } } public string HomeCity { get { return homeCity; } set { homeCity = value; atType = LocationType.Home; a = this.GetAddress(atType, value); if (a != Address.None) { a.City = value; } } } public string HomePC { get { return homePC; } set { homePC = value; atType = LocationType.Home; a = this.GetAddress(atType, value); if (a != Address.None) { a.PostalCode = value; } } } public Province HomeProvince { get { return homeProvince; } set { temp = value.ToString(); if (temp == "None") { temp = ""; } homeProvince = value; atType = LocationType.Home; a = this.GetAddress(atType, temp); if (a != Address.None) { a.Province = value; } } } public string HomeEmail { get { return homeEmail; } set { homeEmail = value; atType = LocationType.Home; this.GetEmailAddress(atType, value); } } public string OtherEmail { get { return otherEmail; } set { otherEmail = value; atType = LocationType.Other; this.GetEmailAddress(atType, value); } } public string HomePhone { get { return homePhone; } set { homePhone = value; atType = LocationType.Home; this.GetPhone(atType, value); } } public string BusinessPhone { get { return businessPhone; } set { businessPhone = value; atType = LocationType.Business; this.GetPhone(atType, value); } } public string MobilePhone { get { return mobilePhone; } set { mobilePhone = value; atType = LocationType.Mobile; this.GetPhone(atType, value); } } public string FaxPhone { get { return faxPhone; } set { faxPhone = value; atType = LocationType.Fax; this.GetPhone(atType, value); } } // Private Methods // Tries to find the Address. If not in list, then creates Address and adds to list. private Address GetAddress(LocationType atType, string blank) { Address a = null; Address b; int count = this.Addresses.Count; while (count > 0) { b = this.Addresses.GetValue(count-1); if (b.AddressType == atType) { a = b; } count -= 1; } if (a != null) { return a; } if (blank.Length == 0) { return Address.None;} a = new Address(); a.AddressType = atType; this.Addresses.Add(a); return a; } // Tries to find the EmailAddress. If not in list, then creates EmailAddress and adds to list. private void GetEmailAddress(LocationType atType, string address) { EmailAddress a = null; EmailAddress b; int count = this.EmailAddresses.Count; while (count > 0) { b = this.EmailAddresses.GetValue(count-1); if (b.EmailAddressType == atType) { a = b; } count -= 1; } if (a != null) { a.Address = address; return; } if (address.Length == 0) { return; } a = new EmailAddress(); a.EmailAddressType = atType; a.Address = address; this.EmailAddresses.Add(a); } // Tries to find the Phone. If not in list, then creates Phone and adds to list. private void GetPhone(LocationType atType, string number) { Phone a = null; Phone b; int count = this.PhoneNumbers.Count; while (count > 0) { b = this.PhoneNumbers.GetValue(count-1); if (b.PhoneNumberType == atType) { a = b; } count -= 1; } if (a != null) { a.PhoneNumber = number; return; } if (number.Length == 0) { return; } a = new Phone(); a.PhoneNumberType = atType; a.PhoneNumber = number; this.PhoneNumbers.Add(a); } // S T A T E T R A N S I T I O N S // State Transition Command Comment // Start -> Active Approve The contact is added to the contact list // Active -> Inactive Deactivate The contact is deactivated // Inactive -> Active Activate The contact is re-activated // // S T A T E M E T H O D S public Start() { } public Active() { } public Inactive() { } // Methods // C O M M A N D S // The Approve command public void Approve() : states(Start, Inactive) { enterstate this.Active(); } // The Deativate command public void Deactivate() : states(Active) { enterstate this.Inactive(); } // General Commands public BaseProfile AddProfile() { BaseProfile a = new BaseProfile(" New Profile"); this.Profiles.Add(a); return a; } public BaseProfile AddProfile(string name) { BaseProfile a = new BaseProfile(name); this.Profiles.Add(a); return a; } public Address AddAddress() { Address a = new Address(" New Address"); this.Addresses.Add(a); return a; } public Address AddAddress(string address1, string city) { Address a = this.AddAddress(); a.Address1 = address1; a.City = city; return a; } public EmailAddress AddEmailAddress() { EmailAddress a = new EmailAddress(" New Email Address"); this.EmailAddresses.Add(a); return a; } public EmailAddress AddEmailAddress(string ea) { EmailAddress a = this.AddEmailAddress(); this.EmailAddresses.Add(a); a.Address = ea; return a; } public Phone AddPhoneNumber() { Phone a = new Phone(" New Phone Number"); this.PhoneNumbers.Add(a); return a; } public Phone AddPhoneNumber(string number) { Phone a = this.AddPhoneNumber(); this.PhoneNumbers.Add(a); a.PhoneNumber = number; return a; } public Note AddNote() { Note a = new Note(" New Note"); this.Notes.Add(a); return a; } public Note AddNote(string title) { Note a = new Note(title); this.Notes.Add(a); return a; } } // DisplayName = "Profile"; // ToolTip = "Profile Definition."; public workflow BaseProfile : Profile { // C O N S T R U C T O R - Instantiate the Profile private BaseProfile() { this.Subject = " New Profile"; tags.Subject = "Tag List"; notes.Subject = "Note List"; } public BaseProfile(string profileName) { this.Subject = profileName; tags.Subject = "Tag List"; notes.Subject = "Note List"; } // Public Methods - used in derived classes to reset the profile public virtual void ResetProfile() { } // Static Properties private static BaseProfile none; public static BaseProfile None { get { return none; } set { none = value; } } // P R O P E R T I E S public string ProfileName { get { return this.Subject; } set { this.Subject = value; } } // Each Profile can belong to a different hierarchy, e.g. Dad belongs to family, Business Worker belongs to company, Soccer Coach belongs to a Club, etc OrganizationUnit ou; List notes = new List(); List tags = new List(); public OrganizationUnit OrgUnit { get { return ou; } set { ou = value; } } public List Notes { get { return notes; } } public List Tags { get { return tags; } } } // DisplayName = "Organization Unit"; // ToolTip = "Represents an Organization Unit."; public workflow OrganizationUnit : Contact { // C O N S T R U C T O R - Instantiate the Organization Unit public OrganizationUnit() { this.Subject = " New Organization"; enterstate this.Start(); } public OrganizationUnit(string subject) { this.Subject = subject; enterstate this.Start(); } public OrganizationUnit(string subject, string toolTip) { this.Subject = subject; this.ToolTip = toolTip; enterstate this.Start(); } public OrganizationUnit(string name, string subject, string toolTip) { this.Subject = subject; this.ToolTip = toolTip; enterstate this.Start(); } // P R O P E R T I E S } // DisplayName = "Resource"; // ToolTip = "Represents an Resource."; public workflow Resource : Contact { // C O N S T R U C T O R - Instantiate the Resource public Resource() { this.Subject = " New Resource"; enterstate this.Start(); } public Resource(string subject) { this.Subject = subject; enterstate this.Start(); } public Resource(string subject, string toolTip) { this.Subject = subject; this.ToolTip = toolTip; enterstate this.Start(); } // P R O P E R T I E S } }